GitHub Actions + KiBotでKiCadをCI/CDしてみた
こんにちは。CX事業本部Delivery部のakkyです。
いままでに、KiCadから自動的にファイルを出力する方法として、さかじさんがKiAutoを紹介されていました。KiAutoを使うと回路図やBOMをコマンドで出力できるようになります。
KiAuto単体でも有用なのですが、さらに便利に使えるプロダクトとして、KiAutoを利用して構築され、ガーバーやドリルファイルなどを設定ファイルを元に出力できるようにした、KiBotという同作者のOSSがあります。
今回は、GitHub ActionsでKiBotを使って、KiCadプロジェクトをCI/CDする方法を試してみましたので、ご紹介します。
KiBotのインストールと動作確認
まずは動作確認と設定ファイルの作成のため、ローカルで動かしてみます。KiBotは依存ソフトウェアも多いので、Dockerを使うのが簡単です。今回はWSL2上のUbuntu 20.04で実行しました。KiCadプロジェクトはver.5系(ローカルのバージョンは5.1.12)のものを使いました。
以下のコマンドで取得してきます。KiCad ver.6プロジェクトの場合は、setsoft/kicad_auto:ki6としてください。
docker pull setsoft/kicad_auto # KiCad ver.5 docker pull setsoft/kicad_auto:ki6 # KiCad ver.6
KiCadファイルの存在するディレクトリに移動し、以下のコマンドを実行すると、Generatedディレクトリにひととおりの出力結果と設定ファイル(kibot_generated.kibot.yaml)が生成されます。
docker run -v $PWD:/tmp -w /tmp setsoft/kicad_auto kibot --quick-start
GitHub Actionsの設定
まずは自動生成されたファイルをそのまま利用することにし、kibot_generated.kibot.yamlをconfig.kibot.yamlにリネームし、次にGitHub Actionsの設定ファイルを.github/workflows/kibot.ymlという名前で以下の内容で作成します。
uses: INTI-CMNB/KiBot@v2はKiCad 5用です。KiCad 6の場合は@v2_k6としてください。 sample.schとsample.kicad_pcbはプロジェクトのファイル名に合わせて変更してください。
name: kibot on: push: paths: - '**.sch' - '**.kicad_pcb' - '.github/workflows/kibot.yml' pull_request: paths: - '**.sch' - '**.kicad_pcb' - '.github/workflows/kibot.yml' jobs: example: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: INTI-CMNB/KiBot@v2 with: # Required - kibot config file config: config.kibot.yaml # optional - prefix to output defined in config dir: output # optional - schematic file schema: 'sample.sch' # optional - PCB design file board: 'sample.kicad_pcb' - name: upload results uses: actions/upload-artifact@v3 with: name: output path: output
このファイルを含んだリポジトリをGitHubへコミットすると、Actionsタブが現れ、実行が完了すると以下のような画面になります。
コミット名のadd switchをクリックすると、詳細が表示され、出力結果のファイルであるoutputがダウンロードできます。
output.zipを解凍すると、手元で生成したのと同じファイルであることが確認できました!
S3へのアップロード
GitHubで保存するファイルは90日間のみ保存され、消えてしまうので、Amazon S3にアップロードするactionも追加してみましょう。 S3へのアップロードにはjakejarvis/s3-sync-actionを使いました。 kibot.ymlを以下のようにします。
name: kibot on: push: paths: - '**.sch' - '**.kicad_pcb' - '.github/workflows/kibot.yml' pull_request: paths: - '**.sch' - '**.kicad_pcb' - '.github/workflows/kibot.yml' jobs: example: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: INTI-CMNB/KiBot@v2 with: config: config.kibot.yaml dir: output schema: 'sample.sch' board: 'sample.kicad_pcb' - name: upload results uses: actions/upload-artifact@v3 with: name: output path: output - name: upload to s3 uses: jakejarvis/s3-sync-action@master with: args: --delete env: AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: ap-northeast-1 SOURCE_DIR: output
AWSのアクセスキーはGitHubのsecrets機能で保存しておきます。
actionが使うIAMユーザーと結果を保存するS3バケットを作っておきます。今回はファイルを上書きしていくので、S3でバージョニングを有効にしておくと、過去のバージョンも見られると思います。 Settings→Security内のSecrets→Actionsを開き、AWS_S3_BUCKET、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYを保存します。
この状態でコミットすると・・・アップロードされていることが確認できました!
おわりに
KiBotを使い、KiCadプロジェクトから自動的にファイルを生成することができるようになりました。これで、製造やレビューに必要なファイルをいちいち生成する必要がなくなりますね。
個人的にはもうひとつやりたいことがあり、それは回路図や基板のGitHub上での比較です。GitHubの画像Diffは大変便利なので、Web上で相違点を見られたらいいなと思うのですが、これはGitHub actionsでは実現が難しいかもしれません。GitのHook機能などで実現できると思うので、今後試してみたいと思います。